home *** CD-ROM | disk | FTP | other *** search
/ SGI Developer Toolbox 6.1 / SGI Developer Toolbox 6.1 - Disc 4.iso / src / demos / GL / flight / light.c < prev    next >
C/C++ Source or Header  |  1994-08-01  |  9KB  |  354 lines

  1. /*
  2.  * Copyright 1984-1991, 1992, 1993, 1994, Silicon Graphics, Inc.
  3.  * All Rights Reserved.
  4.  *
  5.  * This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
  6.  * the contents of this file may not be disclosed to third parties, copied or
  7.  * duplicated in any form, in whole or in part, without the prior written
  8.  * permission of Silicon Graphics, Inc.
  9.  *
  10.  * RESTRICTED RIGHTS LEGEND:
  11.  * Use, duplication or disclosure by the Government is subject to restrictions
  12.  * as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
  13.  * and Computer Software clause at DFARS 252.227-7013, and/or in similar or
  14.  * successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
  15.  * rights reserved under the Copyright Laws of the United States.
  16.  */
  17.  
  18. /*
  19.  *  flight/light.c $Revision: 1.16 $
  20.  */
  21.  
  22. #include "light.h"
  23. #include "flight.h"
  24.  
  25. static int curmaterial = 0;
  26. static int curlighting = 0;
  27.  
  28. /*
  29.  *  materials
  30.  */
  31. float mat_swamp[] = {AMBIENT,    0.3, 0.6, 0.3,
  32.              DIFFUSE,    0.3, 0.6, 0.3,
  33.              SPECULAR,    0.0, 0.0, 0.0,
  34.              SHININESS, 0.0,
  35.              LMNULL};
  36.  
  37. float mat_plane[] = {AMBIENT,    0.7, 0.7, 0.7,
  38.              DIFFUSE,    0.7, 0.7, 0.7,
  39.              SPECULAR,    1.0, 1.0, 1.0,
  40.              SHININESS, 30.0,
  41.              LMNULL};
  42.  
  43. float mat_thruster[] = {AMBIENT,   0.2, 0.2, 0.2,
  44.             DIFFUSE,   0.2, 0.2, 0.2,
  45.             SPECULAR,  0.3, 0.3, 0.3,
  46.             SHININESS, 5.0,
  47.             LMNULL};
  48.  
  49. float mat_dirt[] = {AMBIENT,    0.44, 0.37, 0.19,
  50.              DIFFUSE,    0.44, 0.37, 0.19,
  51.              SPECULAR,    0.0, 0.0, 0.0,
  52.              SHININESS, 0.0,
  53.              LMNULL};
  54.  
  55. float mat_gray0[] = {AMBIENT,    0.88, 0.88, 0.88,
  56.              DIFFUSE,    0.88, 0.88, 0.88,
  57.              SPECULAR,    0.0, 0.0, 0.0,
  58.              SHININESS, 0.0,
  59.              LMNULL};
  60.  
  61. float mat_gray1[] = {AMBIENT,    0.82, 0.82, 0.82,
  62.              DIFFUSE,    0.82, 0.82, 0.82,
  63.              SPECULAR,    0.0, 0.0, 0.0,
  64.              SHININESS, 0.0,
  65.              LMNULL};
  66.  
  67. float mat_gray2[] = {AMBIENT,    0.75, 0.75, 0.75,
  68.              DIFFUSE,    0.75, 0.75, 0.75,
  69.              SPECULAR,    0.0, 0.0, 0.0,
  70.              SHININESS, 0.0,
  71.              LMNULL};
  72.  
  73. float mat_gray3[] = {AMBIENT,    0.69, 0.69, 0.69,
  74.              DIFFUSE,    0.69, 0.69, 0.69,
  75.              SPECULAR,    0.0, 0.0, 0.0,
  76.              SHININESS, 0.0,
  77.              LMNULL};
  78.  
  79. float mat_gray4[] = {AMBIENT,    0.63, 0.63, 0.63,
  80.              DIFFUSE,    0.63, 0.63, 0.63,
  81.              SPECULAR,    0.0, 0.0, 0.0,
  82.              SHININESS, 0.0,
  83.              LMNULL};
  84.  
  85. float mat_gray5[] = {AMBIENT,    0.55, 0.55, 0.55,
  86.              DIFFUSE,    0.55, 0.55, 0.55,
  87.              SPECULAR,    0.0, 0.0, 0.0,
  88.              SHININESS, 0.0,
  89.              LMNULL};
  90.  
  91. float mat_gray6[] = {AMBIENT,    0.13, 0.13, 0.13,
  92.              DIFFUSE,    0.50, 0.50, 0.50,
  93.              SPECULAR,    0.0, 0.0, 0.0,
  94.              SHININESS, 0.0,
  95.              LMNULL};
  96.  
  97. float mat_gray7[] = {AMBIENT,    0.44, 0.44, 0.44,
  98.              DIFFUSE,    0.44, 0.44, 0.44,
  99.              SPECULAR,    0.0, 0.0, 0.0,
  100.              SHININESS, 0.0,
  101.              LMNULL};
  102.  
  103. float mat_gray8[] = {AMBIENT,    0.38, 0.38, 0.38,
  104.              DIFFUSE,    0.38, 0.38, 0.38,
  105.              SPECULAR,    0.0, 0.0, 0.0,
  106.              SHININESS, 0.0,
  107.              LMNULL};
  108.  
  109. float mat_gray9[] = {AMBIENT,    0.31, 0.31, 0.31,
  110.              DIFFUSE,    0.31, 0.31, 0.31,
  111.              SPECULAR,    0.0, 0.0, 0.0,
  112.              SHININESS, 0.0,
  113.              LMNULL};
  114.  
  115. float mat_gray10[] = {AMBIENT,    0.25, 0.25, 0.25,
  116.              DIFFUSE,    0.25, 0.25, 0.25,
  117.              SPECULAR,    0.0, 0.0, 0.0,
  118.              SHININESS, 0.0,
  119.              LMNULL};
  120.  
  121. float mat_gray11[] = {AMBIENT,    0.19, 0.19, 0.19,
  122.              DIFFUSE,    0.19, 0.19, 0.19,
  123.              SPECULAR,    0.0, 0.0, 0.0,
  124.              SHININESS, 0.0,
  125.              LMNULL};
  126.  
  127. float mat_gray12[] = {AMBIENT,    0.13, 0.13, 0.13,
  128.              DIFFUSE,    0.13, 0.13, 0.13,
  129.              SPECULAR,    0.0, 0.0, 0.0,
  130.              SHININESS, 0.0,
  131.              LMNULL};
  132.  
  133. float mat_glass[] = {AMBIENT,    0.4, 0.4, 0.5,
  134.              DIFFUSE,    0.5, 0.5, 0.6,
  135.              SPECULAR,    0.9, 0.9, 1.0,
  136.              SHININESS, 30.0,
  137.              ALPHA,    0.3,
  138.              LMNULL};
  139.  
  140. float mat_prop[] = {AMBIENT,    0.3, 0.3, 0.3,
  141.             DIFFUSE,    0.3, 0.3, 0.3,
  142.             SPECULAR,    0.0, 0.0, 0.0,
  143.             SHININESS,  0.0,
  144.             ALPHA,    0.5,
  145.             LMNULL};
  146.  
  147. float mat_borange[] = {AMBIENT,      0.5, 0.25, 0.0,
  148.                DIFFUSE,      0.5, 0.25, 0.0,
  149.                SPECULAR,  0.0, 0.0, 0.0,
  150.                SHININESS, 0.0,
  151.                LMNULL};
  152.  
  153. float mat_blime[] = {AMBIENT,    0.40, 0.5, 0.35,
  154.              DIFFUSE,    0.40, 0.5, 0.35,
  155.              SPECULAR,    0.0, 0.0, 0.0,
  156.              SHININESS, 0.0,
  157.              LMNULL};
  158.  
  159. float mat_btan[] = {AMBIENT,    0.42, 0.30, 0.25,
  160.             DIFFUSE,    0.42, 0.30, 0.25,
  161.             SPECULAR,    0.0, 0.0, 0.0,
  162.             SHININESS,  0.0,
  163.             LMNULL};
  164.  
  165. float mat_bgray[] = {AMBIENT,    0.6, 0.6, 0.6,
  166.              DIFFUSE,    0.6, 0.6, 0.6,
  167.              SPECULAR,    0.0, 0.0, 0.0,
  168.              SHININESS, 0.0,
  169.              LMNULL};
  170.  
  171. float mat_purple[] = {AMBIENT,     0.6, 0.0, 0.6,
  172.               DIFFUSE,     0.6, 0.0, 0.6,
  173.               SPECULAR,     0.0, 0.0, 0.0,
  174.               SHININESS, 0.0,
  175.               LMNULL};
  176.  
  177. float mat_lpurple[] = {AMBIENT,      0.7, 0.0, 0.7,
  178.                DIFFUSE,      0.7, 0.0, 0.7,
  179.                SPECULAR,  0.0, 0.0, 0.0,
  180.                SHININESS, 0.0,
  181.                LMNULL};
  182.  
  183. float mat_mtrail[] = {AMBIENT,     0.7, 0.7, 0.7,
  184.               DIFFUSE,     0.7, 0.7, 0.7,
  185.               SPECULAR,  0.0, 0.0, 0.0,
  186.               SHININESS, 0.0,
  187.               ALPHA,     0.8,
  188.               LMNULL};
  189.  
  190. float mat_f14black[] = {AMBIENT,   0.1, 0.1, 0.1,
  191.             DIFFUSE,   0.1, 0.1, 0.1,
  192.             SPECULAR,  0.3, 0.3, 0.3,
  193.             SHININESS, 30.0,
  194.             LMNULL};
  195.  
  196. float mat_f14yellow[] = {AMBIENT,   0.9, 0.7, 0.0,
  197.              DIFFUSE,   0.9, 0.7, 0.0,
  198.              SPECULAR,  0.8, 0.8, 0.8,
  199.              SHININESS, 30.0,
  200.              LMNULL};
  201.  
  202. float mat_white[] = {AMBIENT,   1.0, 1.0, 1.0,
  203.              DIFFUSE,   1.0, 1.0, 1.0,
  204.              SPECULAR,  1.0, 1.0, 1.0,
  205.              SHININESS, 30.0,
  206.              LMNULL};
  207.  
  208.  
  209.  
  210. /*
  211.  *  lights
  212.  */
  213. float sun[] = {AMBIENT, 0.3, 0.3, 0.3,
  214.            LCOLOR,   1.0, 1.0, 1.0,
  215.            POSITION, 0.0, 1.0, 0.0, 0.0,
  216.            LMNULL};
  217.  
  218. float moon[] = {AMBIENT, 0.0, 0.0, 0.0,
  219.         LCOLOR,   0.2, 0.2, 0.2,
  220.         POSITION, 1.0, 1.0, 1.0, 0.0,
  221.         LMNULL};
  222.  
  223. float inst_light[] = {AMBIENT, 0.3, 0.3, 0.3,
  224.               LCOLOR,   1.0, 1.0, 1.0,
  225.               POSITION, 0.0, 1.0, 0.5, 0.0,
  226.               LMNULL};
  227.  
  228. /*
  229.  *  lighting models
  230.  */
  231. float infinite[] = {AMBIENT, 0.1,  0.1, 0.1,
  232.             LOCALVIEWER, 0.0,
  233.             LMNULL};
  234.  
  235.  
  236. init_lighting()
  237. {
  238.     lmdef (DEFMATERIAL, MAT_SWAMP, 0, mat_swamp);
  239.     lmdef (DEFMATERIAL, MAT_PLANE, 0, mat_plane);
  240.     lmdef (DEFMATERIAL, MAT_THRUSTER, 0, mat_thruster);
  241.     lmdef (DEFMATERIAL, MAT_DIRT, 0, mat_dirt);
  242.     lmdef (DEFMATERIAL, MAT_GRAY0, 0, mat_gray0);
  243.     lmdef (DEFMATERIAL, MAT_GRAY1, 0, mat_gray1);
  244.     lmdef (DEFMATERIAL, MAT_GRAY2, 0, mat_gray2);
  245.     lmdef (DEFMATERIAL, MAT_GRAY3, 0, mat_gray3);
  246.     lmdef (DEFMATERIAL, MAT_GRAY4, 0, mat_gray4);
  247.     lmdef (DEFMATERIAL, MAT_GRAY5, 0, mat_gray5);
  248.     lmdef (DEFMATERIAL, MAT_GRAY6, 0, mat_gray6);
  249.     lmdef (DEFMATERIAL, MAT_GRAY7, 0, mat_gray7);
  250.     lmdef (DEFMATERIAL, MAT_GRAY8, 0, mat_gray8);
  251.     lmdef (DEFMATERIAL, MAT_GRAY9, 0, mat_gray9);
  252.     lmdef (DEFMATERIAL, MAT_GRAY10, 0, mat_gray10);
  253.     lmdef (DEFMATERIAL, MAT_GRAY11, 0, mat_gray11);
  254.     lmdef (DEFMATERIAL, MAT_GRAY12, 0, mat_gray12);
  255.     lmdef (DEFMATERIAL, MAT_GLASS, 0, mat_glass);
  256.     lmdef (DEFMATERIAL, MAT_PROP, 0, mat_prop);
  257.     lmdef (DEFMATERIAL, MAT_BORANGE, 0, mat_borange);
  258.     lmdef (DEFMATERIAL, MAT_BLIME, 0, mat_blime);
  259.     lmdef (DEFMATERIAL, MAT_BTAN, 0, mat_btan);
  260.     lmdef (DEFMATERIAL, MAT_BGRAY, 0, mat_bgray);
  261.     lmdef (DEFMATERIAL, MAT_PURPLE, 0, mat_purple);
  262.     lmdef (DEFMATERIAL, MAT_LPURPLE, 0, mat_lpurple);
  263.     lmdef (DEFMATERIAL, MAT_MTRAIL, 0, mat_mtrail);
  264.     lmdef (DEFMATERIAL, MAT_F14BLACK, 0, mat_f14black);
  265.     lmdef (DEFMATERIAL, MAT_F14YELLOW, 0, mat_f14yellow);
  266.     lmdef (DEFMATERIAL, MAT_WHITE, 0, mat_white);
  267.  
  268.     lmdef (DEFLIGHT, SUN, 0, sun);
  269.     lmdef (DEFLIGHT, MOON, 0, moon);
  270.     lmdef (DEFLIGHT, INST_LIGHT, 0, inst_light);
  271.  
  272.     lmdef (DEFLMODEL, INFINITE, 0, infinite);
  273. }
  274.  
  275.  
  276. lighting(b)
  277.     int b;
  278. {
  279.     if (in_cmode)
  280.     return;
  281.  
  282.     if (b)
  283.     lmbind(LMODEL, INFINITE);
  284.     else
  285.     lmbind(LMODEL, 0);
  286. }
  287.  
  288.  
  289. set_lightpos(name, x, y, z)
  290.     int name;
  291.     float x, y, z;
  292. {
  293.     static float lpos[6] = {POSITION, 0.0, 1.0, 0.0, 0.0, LMNULL};
  294.  
  295.     lpos[1] = x;
  296.     lpos[2] = y;
  297.     lpos[3] = z;
  298.     lmdef(DEFLIGHT, name, 0, lpos);
  299. }
  300.  
  301.  
  302. set_lightcolor(name, ar, ag, ab, r, g, b)
  303.     int name;
  304.     float ar, ag, ab, r, g, b;
  305. {
  306.     static float lcol[9] = {AMBIENT, 0.3, 0.3, 0.3, LCOLOR, 1.0, 1.0, 1.0,
  307.                 LMNULL};
  308.  
  309.     lcol[1] = ar;
  310.     lcol[2] = ag;
  311.     lcol[3] = ab;
  312.     lcol[5] = r;
  313.     lcol[6] = g;
  314.     lcol[7] = b;
  315.     lmdef(DEFLIGHT, name, 0, lcol);
  316. }
  317.  
  318.  
  319. set_matalpha(name, a)
  320.     int name;
  321.     float a;
  322. {
  323.     static float ma[3] = {ALPHA, 0.0, LMNULL};
  324.  
  325.     ma[1] = a;
  326.     lmdef(DEFMATERIAL, name, 0, ma);
  327. }
  328.  
  329.  
  330. set_matemission(name, r, g, b)
  331.     int name;
  332.     float r, g, b;
  333. {
  334.     static float me[6] = {EMISSION, 0.0, 0.0, 0.0, LMNULL};
  335.  
  336.     me[1] = r;
  337.     me[2] = g;
  338.     me[3] = b;
  339.     lmdef(DEFMATERIAL, name, 0, me);
  340. }
  341.  
  342. /*
  343. setmaterial(name)
  344. {
  345.     static curmaterial = 0;
  346.  
  347.     if (name != curmaterial)
  348.     {
  349.     curmaterial = name;
  350.     lmbind(MATERIAL, name);
  351.     }
  352. }
  353. */
  354.